![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Cześć zrobiłem krótki skrypt logowania się do bazy danych, wygląda następująco:
Problem jest prawdopodobnie w sekcji zapytania (linie: 13-20) Ponieważ gdy zrobię zwrócenie wyników to wyrzuca mi wartość 0 (Linia 35). Nie wiem dlaczego zapytanie jest błędne i nie wyrzuca mi nic z bazy danych. Podam także działający skrypt logowania (ale ten jest bez zabezpieczeń przed SQL Infection):
Oraz formularz logowania:
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
A co w tym zapytaniu jest źle (IMG:style_emoticons/default/questionmark.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
chodzi o ten warunek w if, zamiast if zrób blok try catch
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jest bez sensu bo porównujesz string. Co zwraca if ('string')? Odpytaj bazę a if zrób na wynikach np ile wierszy zostało zwróconych. Nie stosuj md5 do haseł.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ok dzieki za odp. Zaraz zmienię to zapytanie.
A do hashowania powinienem uzyc którejś z tych metod??:
; EDIT: Zrobilem cos takiego ale zwraca mi: "cos nie tak!!!"
Co takiego zrobiłem źle, że ten skrypt poniżej działa poprawnie a ten wyżej nie (IMG:style_emoticons/default/questionmark.gif)
Ten post edytował major697 26.03.2016, 13:54:16 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
viking On tam nawet nie porównywał do stringa, a do niego przypisywał, wiec warunek zawsze spełniony.
major697 nie mieszaj obiektowego mysqli z strukturalnym, nie działa bo zamykasz połączenie przed czyli $result->close(); |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Wiem z tym zamknięciem. Przeniosłem je na koniec skryptu ale to nic nie daje bo dalej zwraca mi "cos nie tak!!!"
Posługiwałem sie podobnym skryptem który wygląda tak (Formularz kliknij):
Ale nawet gdy zmienie zapytanie na coś takiego:
To wyrzuca mi błąd: "Fatal error: Call to a member function bindValue() on a non-object in... ADRES" Ten post edytował major697 26.03.2016, 14:57:35 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
bo tam jest pdo, a ty masz mysqli, one sa podobne ale to nie to samo (IMG:style_emoticons/default/smile.gif)
$result->num_rows; tak powinno u ciebie wygladać |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dalej tego nie ogarniam mam teraz taki skrypt:
Ale tym razem zwraca mi "Jest wiecej niż jeden" tyle,że zwraca taki wynik nawet gdy wpisze w formularzu dane których napewno nie ma w bazie ... błąd muszę mieć więc w zapytaniu |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
bez tych ` przy `login` i `haslo`
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
var_dump($result) i będziesz wiedział wszystko. Poza tym if ($result->num_rows > 0)
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
OK z var_dump() zwraca mi że nie ma wpisywanego rekordu w bazie danych, tyle, że według mnie zapytanie jest poprawne bo kiedy je wpisze w phpmyadmin w zapytanie SQl i znak ? zamienię na maila podanego przy rejestracji to normalnie wyrzuci poprawny wynik a w skrypcie jest coś źle. Skrypt wygląda tak
Wynik z var_dump: C:\wamp64\www\projekty\login.php:25: object(mysqli_stmt)[2] public 'affected_rows' => int -1 public 'insert_id' => int 0 public 'num_rows' => int 0 public 'param_count' => int 1 public 'field_count' => int 4 public 'errno' => int 0 public 'error' => string '' (length=0) public 'error_list' => array (size=0) empty public 'sqlstate' => string '00000' (length=5) public 'id' => int 1 wykonałem bindowanie (linia 8) według tej instrukcji: LINK Nie wiem dalej gdzie jest błąd bo po wpisaniu loginu (takiego jaki jest w bazie) wyrzuca: Nie ma takiego rekordu w bazie |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Według public 'param_count' => int 1 bindowany jest tylko 1. Z kodu który tu wrzucasz wynika że podajesz 2.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nawet jeśli usunę parametr hasło z zapytania i skrypt bedzie wyglądał tak:
i jesli wpiszę tylko parametr login to i tak wyrzuci Nie ma takiego rekordu w bazie. A wynik z var_dump bedzie wyglądał tak: C:\wamp64\www\projekty\login.php:17: object(mysqli_stmt)[2] public 'affected_rows' => int 0 public 'insert_id' => int 0 public 'num_rows' => int 0 public 'param_count' => int 1 public 'field_count' => int 4 public 'errno' => int 0 public 'error' => string '' (length=0) public 'error_list' => array (size=0) empty public 'sqlstate' => string '00000' (length=5) public 'id' => int 1 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A sprawdzałeś co masz w $_POST?
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Tak sprawdzalem:
printf($_POST['login']); i to co wpisze w formularzu w login to jest poprawnie zwracane |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 21:34 |